/*
 * @lc app=leetcode.cn id=53 lang=javascript
 *
 * [53] 最大子序和
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */
// var maxSubArray = function (nums) {
//     let result = nums[0]; //存储和最大的值
//     let sum = 0; //计算累加值
//     for (let num of nums) {
//         if (sum > 0) {
//             sum += num;
//         } else {
//             sum = num;
//         }
//         result = Math.max(result, sum);
//     }
//     return result;
// };
var maxSubArray = function(nums) {
    let min = 0; // 用来记录前缀和最小的值
    let max = -Infinity;  // 初始化为负无穷，确保任何数都大于它
    let pre = 0; // 用来记录遍历数组累加和
    for(let i = 0; i < nums.length; i++) {
        pre += nums[i];
        max = Math.max(max, pre-min); // 更新最大子数组和
        min = Math.min(min, pre);  // 更新前缀和最小值
    }
    return max
};
// @lc code=end